#include"ConfigParser.h"
#include<istream>
#include<fstream>
#include<iostream>

const std::string ConfigParser::configPath = "config/";


ConfigParser::ConfigParser()
{

}

ConfigParser::ConfigParser(const std::string& name)
{
	Json::Reader reader;
	std::ifstream ifs(configPath + name, std::ios::binary);
	if (!ifs.is_open())
	{
		std::cout << "error " << std::endl;
		return;
	}
	if (reader.parse(ifs,m_data))
	{
		std::cout << "parse json success" << std::endl;
	}
	else
	{
		std::cout << "parse json fail" << std::endl;
	}
	ifs.close();
}

ConfigParser::~ConfigParser()
{
}

Json::Value ConfigParser::get(const std::string& id)
{
	Json::Value idToIndex = m_data[0];
	//std::cout << id << std::endl;
	//std::cout << writer.write(idToIndex) << std::endl;
	auto vIndex = idToIndex[id].asInt();
	return m_data[vIndex];
}

Json::Value ConfigParser::get(const std::initializer_list<std::string>& ids)
{
	Json::Value idToIndex = m_data[0];
	std::string id = "";
	int len = ids.size();
	int index = 1;
	for (auto var : ids)
	{
		if (index == len)
		{
			id.append(var);
		}
		else
		{
			id.append(var + "_");
		}
		index++;
	}
	auto vIndex = idToIndex[id].asInt();
	return m_data[vIndex];
}

Json::Value ConfigParser::indexOf(const int& index)
{
	return m_data[index + 1];
}

int ConfigParser::length()
{
	return m_data[1]["len"].asInt();
}

